package com.atdel.demo13;


/**
 *@BelongsProject: java_study
 *@BelongsPackage: com.atdel.demo13
 *@Author: Del
 *@CreateTime: 2025-03-12  11:13
 *@Description: 账号
 *@Version: 1.0
 */
public class Account {
    // 账户余额
    private double balance;

    public Account(double balance){
        this.balance = balance;
    }

   /***
    * @author: Del
    * @date: 2025/3/12 11:21
    * @param: [amount: 取款金额]
    * @return: void
    * @description: 取款方法，用于从账户中取出指定金额的钱。该方法是同步的，以确保在多线程环境下的线程安全。
    **/
   public synchronized void withdraw(double amount){
       // 检查账户余额是否足够
       if(balance >= amount){
           System.out.println(Thread.currentThread().getName()+"取款成功，吐出钞票"+amount);
           try {
               // 模拟取款操作的延时
               Thread.sleep(1000);
           } catch (InterruptedException e) {
               e.printStackTrace();
           }
           balance -= amount;
           System.out.println("余额为：" + balance);
       }else{
           System.out.println(Thread.currentThread().getName() + "取款失败，余额不足");
       }
   }

    
    /***
     * @author: Del
     * @date: 2025/3/12 11:20
     * @param: [amount]
     * @return: void  
     * @description: 存款方法，用于向账户中存入指定金额的钞票。该方法是同步的，确保在同一时间内只有一个线程可以执行此方法，以避免并发问题。
     **/
    public synchronized void deposit(double amount){
        // 输出当前线程名称和存款金额，表明存款操作正在进行
        System.out.println(Thread.currentThread().getName() + "存款成功，存入钞票" + amount);
        // 模拟存款操作的耗时过程
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            // 如果线程被中断，则打印异常信息
            e.printStackTrace();
        }
        // 增加账户余额
        balance += amount;
        // 输出当前账户余额
        System.out.println("余额为：" + balance);
    }
}
